#include <vector>

#include "OptionsGetter.h"

NestedMap color_to_map(const json& j) {
	Color _list_to_color(json& color_str);
	NestedMap result;
	for (auto& [key, value] : j["colors"].items()) {
		result[key] = _list_to_color((json&)value);
	}
	return result;
}

json read_json(std::string path) {
	// 读取 JSON 文件
	std::ifstream file(path);
	if (!file.is_open()) {
		std::cerr << "[ERROR]打开JSON文件时发生错误。" << std::endl;
		exit(-1);
	}

	// 解析 JSON
	json j;
	try {
		file >> j;  // 从文件流解析
	}
	catch (json::parse_error& e) {
		std::cerr << "[ERROR]解析JSON文件时发生错误：" << e.what() << std::endl;
		exit(-1);
	}
	file.close();
	return j;
}

void write_json(std::string path, json& j) {
	std::ofstream out_file(path);
	if (out_file.is_open()) {
		out_file << j.dump(4);  // 4 表示缩进空格数
		out_file.close();
	}
	else {
		std::cerr << "[ERROR]重写JSON文件时发生错误。" << std::endl;
		exit(-1);
	}
}

Color _list_to_color(json& color_list) {
	Color result = {
		.x = (Byte)color_list[0],
		.y = (Byte)color_list[1],
		.z = (Byte)color_list[2]
	};
	return result;
}
